package co.com.desarrollo.pedidos.services.impl;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import co.com.desarrollo.pedidos.dao.UsuarioDAO;
import co.com.desarrollo.pedidos.entities.Rol;
import co.com.desarrollo.pedidos.entities.Usuario;
import co.com.desarrollo.pedidos.services.UsuarioService;
import co.com.desarrollo.pedidos.services.exceptions.UsuarioNotFoundException;

@Service("usuarioService")
public class UsuarioServiceImpl implements UsuarioService {

	@Autowired
	private UsuarioDAO usuarioDAO;

	@Override
	public void setUsuario(Usuario usuario) {
		usuarioDAO.store(usuario);
	}

	@Override
	public Usuario getUsuarioById(Usuario usuario) {
		return usuarioDAO.findById(usuario.getIdusuario());
	}

	@Override
	public Usuario getUsuarioByDocumento(Usuario usuario) {
		return usuarioDAO.findByDocument(usuario.getDocumento());
	}

	@Override
	public Usuario getUsuarioByCorreo(Usuario usuario) {
		return usuarioDAO.findByEmail(usuario.getCorreo());
	}

	@Override
	public List<Usuario> getAllUsuarios() {
		return usuarioDAO.findAll();
	}

	@Override
	public List<Usuario> getUsuariosByRol(Rol rol) {
		return usuarioDAO.findByRol(rol.getIdrol());
	}

	@Override
	public List<Usuario> getUsuariosByNombreApellido(Usuario usuario) {
		return usuarioDAO.findByNombreApellido(usuario.getNombre(), usuario.getApellido());
	}

	@Override
	public List<Usuario> getUsuariosActivos() {
		return usuarioDAO.findUsuariosActivos();
	}

	@Override
	public Usuario activarUsuario(Usuario usuario) throws UsuarioNotFoundException {
		usuario = findUsuarioMethods(usuario);
		usuario.setActivo(1);
		return usuarioDAO.store(usuario);
	}

	@Override
	public Usuario desactivarUsuario(Usuario usuario) throws UsuarioNotFoundException {
		usuario = findUsuarioMethods(usuario);
		usuario.setActivo(0);
		return usuarioDAO.store(usuario);
	}

	@Override
	public Usuario findUsuarioMethods(Usuario usuario)throws UsuarioNotFoundException {
		Usuario usuarioFound = getUsuarioById(usuario);
		if (usuarioFound == null){
			usuario = getUsuarioByDocumento(usuario);
			
		}else
			usuario = usuarioFound;
		if (usuario!=null)
			return usuario;
		throw new UsuarioNotFoundException("El usuario solicitado no existe.");
	}




}
